package com.hspedu.final_;

public class FinalDetail01 {
    public static void main(String[] args) {
        CC cc = new CC();
        EE ee = new EE();
        ee.hi();
    }
}

class AA{
    /*
        1.定义时：public final double TAX_RATE = 0.08;
        2.构造器中
        3.代码块中
     */
    public final double TAX_RATE = 0.08;//定义时中赋值
    public final double TAX_RATE2;
    public final double TAX_RATE3;

    //构造器中赋值
    public AA(){
        TAX_RATE2 = 1.1;
//        TAX_RATE = 1.12;
    }

    //代码块中赋值
    {
        TAX_RATE3 = 8.8;
    }
}

class BB{
    /*
        如果 final 修饰的属性是静态的，则初始化的位置只能是
        1.定义时
        2.static 代码块中
        注意：不能再构造器中，因为static 的属性 会在类加载的时候被加载，
        final关键字修饰的属性必须有初始值，而构造器在类加载时不一定会调用，
        这个时候就没有初始值，所以不行
     */
}

//final修饰的类虽然不能被继承，但是能实例化
final class CC{

}

//如果类没有被final修饰，但含有final修饰的方法，
// 则该方法可以被继承，但是不能被重写
// 即遵守继承机制
class DD{
    public final void hi(){
        System.out.println("DD类的final hi()方法被调用~~");
    }
}

class EE extends DD{

}